Laravel
Models Migration Relation
Introduction,istallation Strucutre,model,migration Migration,Models,Relation
Les Relations
BelongsTo HasOne HasMany BelongsToMany HasManyThrough
Exemples des Relations
Relations:oneToMany,ManyToMany... Relations:Exemples
Exercices
Exercice 1 Exercice 2
Controllers Views Routes
Routes,Controller,Model,view CRUD: Etudiant CRUD: Car CRUD,Recherche: Book
Validation
Exemple :Projets
Api:Laravel +React
Middleware

Seeders & Factories

Authenfication
Layouts





Laravel:Structure du projet ,Migration ,Models

L'arichecture MVC(Model,View,Controller) d'un projet Laravel est la suivante

   ├── gestionVentes
        │    ├── app
	│    │    ├── Http
	│    │        ├── Controllers
	│    │        │     ├── ProduitController.php
	│    │        │     ├── ...les controllers font les traitements métiers 
	│    ├── Models
	│    │     ├── Client.php
	│    │     ├── ...Les models comuniquent avec la BD
	├── database
	│    ├── migrations
	│    │     ├── create_table_clients.php
	│    │     ├── ....permet de créer les tables dans la BD
	├── resources
	│    ├── views
	│    │     ├── client
	│    │     │     ├── index.blade.php
	│    │     │     ├── create.blade.php
	│    │     │     ├── show.blade.php
	│    │     │     ├── edit.blade.php
	│    │     │     ├── ....
	├── routes
	│    ├── web.php
        │    │     ├── contenant les routes:
        │    │     │     ├── Route::resource('clients', ClientController::class);
        │    │     │     ├── ...


Configuration de la base de données

Modifier le fichier .env pour configurer la base de données:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=nom_de_votre_base_de_donnees
DB_USERNAME=votre_nom_d_utilisateur
DB_PASSWORD=votre_mot_de_passe
Exemple
Il faut créer la base de données GestionVentes dans mysql:
Create database gestionVentes

Puis modifier le fichiers .env dans le projet Laravel
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=gestionVentes
DB_USERNAME=root
DB_PASSWORD=

Model et Migration

Les relations dans Laravel font référence aux liens établis entre les modèles Eloquent, qui représentent des tables de base de données. Ces relations permettent de définir comment les enregistrements dans une table sont liés à ceux d'une autre table. Laravel offre plusieurs types de relations éloquentes qui simplifient la récupération et la manipulation de données associées.

Voici quelques-unes des relations les plus couramment utilisées dans Laravel :

  1. BelongsTo (Appartient à) : Cette relation est utilisée pour définir une association où un modèle "appartient à" un autre modèle. Par exemple, un commentaire appartient à un article.

  2. HasOne (A un) : Établit une relation où un modèle a exactement un autre modèle associé. Par exemple, un utilisateur a une seule adresse.

  3. HasMany (A plusieurs) : Définit une relation où un modèle peut avoir plusieurs modèles associés. Par exemple, un article peut avoir plusieurs commentaires.

  4. BelongsToMany (Appartient à beaucoup de) : Utilisé pour les relations plusieurs-à-plusieurs. Par exemple, un utilisateur peut appartenir à plusieurs rôles, et un rôle peut être associé à plusieurs utilisateurs.

  5. HasManyThrough (A plusieurs à travers) : Permet d'accéder à des enregistrements associés à travers une relation intermédiaire. Par exemple, pour accéder aux commentaires d'un auteur à travers les articles.

  6. MorphOne, MorphMany (Polymorphique un-à-un, Polymorphique un-à-plusieurs) : Utilisés pour créer des relations polymorphiques où un modèle peut être associé à plusieurs types de modèles différents.

  7. MorphToMany, MorphedByMany (Polymorphique plusieurs-à-plusieurs) : Permettent de créer des relations polymorphiques plusieurs-à-plusieurs entre plusieurs modèles.

Les relations éloquentes facilitent la navigation entre les données associées, rendant le code plus lisible et permettant des opérations complexes avec un code concis et expressif. Ces relations sont définies dans les modèles Eloquent à l'aide de méthodes spécifiques, ce qui permet de créer des requêtes SQL complexes de manière transparente.

Étape 1 : Migration

	├── database
	│    ├── migrations
	│    │     ├── create_table_clients.php
La migration est représentée par le fichier create_clients_table.php dans le répertoire database/migrations.
Elle contient des instructions pour créer la table "clients" avec les colonnes "idclient", "nom", "prenom", created_date,updated_date. La migration est responsable de définir la structure de la table dans la base de données.
Ouvrez votre terminal et exécutez la commande artisan suivante pour générer une migration :
php artisan make:migration create_clients_table
Cela va créer un nouveau fichier de migration dans le répertoire database/migrations. Ouvrez ce fichier et modifiez-le pour ressembler à ceci :

database/migrations/create_clients_table.php

<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

return new class extends Migration
{
    public function up()
    {//create table clients
        Schema::create('clients', function (Blueprint $table) {
			//idclient int primary key
            $table->id('idclient');
			//nom varchar(25)
            $table->string('nom');
			//prenom varchar(25)
            $table->string('prenom');
			//create_at date
			//updated_at date
            $table->timestamps();
        });
    }

    public function down()
    {
        Schema::dropIfExists('clients');
    }
}

Étape 2 : Exécution de la migration

Permet de créer la table "clients" dans votre base de données avec les colonnes spécifiées.
Exécutez la migration avec la commande artisan :

php artisan migrate

Étape 3 : Modèle (Model)

Le modèle "Client" est représenté par le fichier Client.php dans le répertoire app/models.
Le modèle est lié à la table "clients" à travers la propriété $table qui spécifie le nom de la table dans la base de données.
générez le modèle avec la commande artisan :
php artisan make:model Client
Cela va créer un fichier Client.php dans le répertoire app.
	│    ├── Models
	│    │     ├── Client.php

Http/app/Models/Client.php


<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Client extends Model
{
    protected $table = 'clients';
    protected $primaryKey = 'idclient';
    public $timestamps = true;

    protected $fillable = [
        'nom', 'prenom'
    ];
}
La propriété $primaryKey spécifie la clé primaire de la table, qui est "idclient" (voir fichier de migration) dans ce cas.
La propriété $timestamps indique si le modèle utilise des horodatages, par défaut à true. La propriété $fillable spécifie les colonnes de la table "clients" qui peuvent être remplies

Types de données

Voici la liste des type de données et attribut qu'on trouve dans Laravel :
CommandDescription
$table->bigIncrements('id');Incrementing ID (primary key) using a "UNSIGNED BIG INTEGER" equivalent.
$table->bigInteger('votes');BIGINT equivalent for the database.
$table->binary('data');BLOB equivalent for the database.
$table->boolean('confirmed');BOOLEAN equivalent for the database.
$table->char('name', 4);CHAR equivalent with a length.
$table->date('created_at');DATE equivalent for the database.
$table->dateTime('created_at');DATETIME equivalent for the database.
$table->decimal('amount', 5, 2);DECIMAL equivalent with a precision and scale.
$table->double('column', 15, 8);DOUBLE equivalent with precision, 15 digits in total and 8 after the decimal point.
$table->enum('choices', ['foo', 'bar']);ENUM equivalent for the database.
$table->float('amount');FLOAT equivalent for the database.
$table->increments('id');Incrementing ID (primary key) using a "UNSIGNED INTEGER" equivalent.
$table->integer('votes');INTEGER equivalent for the database.
$table->json('options');JSON equivalent for the database.
$table->jsonb('options');JSONB equivalent for the database.
$table->longText('description');LONGTEXT equivalent for the database.
$table->mediumInteger('numbers');MEDIUMINT equivalent for the database.
$table->mediumText('description');MEDIUMTEXT equivalent for the database.
$table->morphs('taggable');Adds INTEGER taggable_id and STRING taggable_type.
$table->nullableTimestamps();Same as timestamps(), except allows NULLs.
$table->rememberToken();Adds remember_token as VARCHAR(100) NULL.
$table->smallInteger('votes');SMALLINT equivalent for the database.
$table->softDeletes();Adds deleted_at column for soft deletes.
$table->string('email');VARCHAR equivalent column.
$table->string('name', 100);VARCHAR equivalent with a length.
$table->text('description');TEXT equivalent for the database.
$table->time('sunrise');TIME equivalent for the database.
$table->tinyInteger('numbers');TINYINT equivalent for the database.
$table->timestamp('added_on');TIMESTAMP equivalent for the database.
$table->timestamps();Adds created_at and updated_at columns.
$table->uuid('id');UUID equivalent for the database.